package lend

import (
	"github.com/gofiber/fiber/v2"
	"sg-backend/global"
	"sg-backend/model/paylog"
	"time"
)

/*
 * method  GET
 * path    /api/lendLog
 */

// 处理回传前端的数据结构
type _LendDataJson struct {
	Id           uint       `json:"id"`
	ToWho        string     `json:"toWho"`
	OweMoney     float64    `json:"oweMoney"`
	PaybackMoney float64    `json:"paybackMoney"`
	Done         bool       `json:"done"`
	OweTime      *time.Time `json:"oweTime"`
	Remark       string     `json:"remark"`
	Date         string     `json:"date"`
}

// GetLendLog GET请求，获取数据
func GetLendLog(ctx *fiber.Ctx) error {

	// 计算分页，mysql第一页为0计算
	pageSize := ctx.QueryInt("pageSize", 10)
	current := ctx.QueryInt("current", 1)
	offSet := (current - 1) * pageSize

	// 总数
	var total int64

	// 指定数据model
	var lendLogs []paylog.LendLog

	// 匹配全部数据，计算总数
	r := global.DB.Where("user_id = ?", global.AuthUser.UserId).
		Model(&paylog.LendLog{}).Count(&total)
	if r.Error != nil {
		return ctx.JSON(fiber.Map{
			"status":  "error",
			"message": "数据库查询出错！" + r.Error.Error(),
		})
	}
	if r.Error != nil {
		return ctx.JSON(fiber.Map{
			"status":  "error",
			"message": "数据库查询出错！" + r.Error.Error(),
		})
	}

	// 2，分页处理
	if err := r.Order("owe_time desc").Offset(offSet).Limit(pageSize).Find(&lendLogs); err.Error != nil {
		return ctx.JSON(fiber.Map{
			"status":  "error",
			"message": "数据分页出错！" + err.Error.Error(),
		})
	}

	// 3，对查询到的数据进行处理，将同日期的删除
	var checkDate = ""
	var data []_LendDataJson
	for _, v := range lendLogs {

		// 日期检测
		_date := v.OweTime.Format("2006-01-02")
		if checkDate == _date {
			_date = ""
		} else {

			// 日期不相等，是新的一天
			checkDate = v.OweTime.Format("2006-01-02")
		}
		data = append(data, _LendDataJson{
			Id:           v.Id,
			ToWho:        v.ToWho,
			OweMoney:     v.OweMoney,
			PaybackMoney: v.PaybackMoney,
			Done:         v.Done,
			OweTime:      v.OweTime,
			Remark:       v.Remark,
			Date:         _date,
		})
	}

	// 查询结束返回结果
	return ctx.JSON(fiber.Map{
		"status":   "done",
		"success":  true,
		"message":  "请求成功！",
		"data":     data,
		"total":    total,
		"current":  current,
		"pageSize": pageSize,
	})
}
